package educar.gui;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JOptionPane;
import javax.swing.JTabbedPane;
import javax.swing.JList;
import javax.swing.JLayeredPane;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.JMenuItem;
import java.awt.Color;

import educar.controllers.AdminAlumnoController;
import educar.controllers.AdminDocenteController;
import educar.controllers.AdminCargoController;
import educar.controllers.AdminMateriaController;
import educar.controllers.AdminFacultadController;
import educar.controllers.AdminViewController;

public class AdminView extends JFrame implements IView
{
    private static final long serialVersionUID = 1L;

    public static final String ACTUALIZAR   = "Actualizar";
    public static final String GUARDARNUEVO = "Guardar Nuevo";
    public static final String BORRAR       = "Borrar";
    public static final String RESET        = "Reset";
    public static final String CARGO        = "Cargo";
    public static final String MATERIA      = "Materia";
    public static final String SALIR      = "Salir";
    public static final String REFRESCAR      = "Refrescar";

    GenericListener listener;

    private JPanel contentPane;

    private JTextField alumnoDniField;
    private JTextField alumnoNombreField;
    private JTextField alumnoApellidoField;
    private JTextField alumnoNroAlumnoField;
    private JTextField alumnoUsuarioField;
    private JTextField alumnoContrasenaField;
    private JTextField docenteDniField;
    private JTextField docenteNombreField;
    private JTextField docenteApellidoField;
    private JTextField docenteContrasenaField;
    private JTextField docenteUsuarioField;
    private JTextField facultadNombreField;
    private JTextField facultadCodigoField;
    private JTextField materiaNombreField;
    private JTextField materiaCodigoField;
    private JTextField cargoNombreField;
    private JTextField cargoCodigoField;

    JList cargoList;
    JList alumnoList;
    JList docenteList;
    JList materiaList;
    JList facultadList;

    public void present(String model)
    {
        JOptionPane.showMessageDialog(null, model);
    }

    /**
     * Create the frame.
     */
    public AdminView()
    {
        listener = new GenericListener();

        this.setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 1024, 600);

        setMenu();

        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JTabbedPane educarPane = new JTabbedPane(JTabbedPane.TOP);
        educarPane.setBounds(5, 5, 960, 590);
        contentPane.add(educarPane);

        setPestanaAlumno(educarPane);
        setPestanaDocente(educarPane);
        setPestanaFacultad(educarPane);
        setPestanaCargo(educarPane);
        setPestanaMateria(educarPane);
    }

    public void setMenu()
    {
        JMenuBar menuBar = new JMenuBar();
        setJMenuBar(menuBar);

        JMenu educarMenu = new JMenu("Educar");
        menuBar.add(educarMenu);

        JMenuItem salirMenuItem = new JMenuItem(SALIR);
        educarMenu.add(salirMenuItem);
        /*
        salirMenuItem.addActionListener(
        		new ActionListener() {
        			public void actionPerformed(ActionEvent event)
        			{
        				System.exit(0);
        			}
        		});
        */
        JMenuItem refresh = new JMenuItem(REFRESCAR);
        educarMenu.add(refresh);
        
        AdminViewController c  = new AdminViewController();
        c.setView(this);
        listener.associate(refresh, c);
        listener.associate(salirMenuItem, c);
        
        //TODO: pasar "addActionListener" a un Listener de algun controlador
        
    }

    public void setPestanaCargo(JTabbedPane educarPane)
    {
        JLayeredPane cargoPestana = new JLayeredPane();
        educarPane.addTab("Cargo", null, cargoPestana, null);

        JLayeredPane cargoPane = new JLayeredPane();
        cargoPane.setBackground(Color.GRAY);
        cargoPane.setBounds(224, 12, 653, 443);
        cargoPestana.add(cargoPane);

        JLabel cargoNombreLabel = new JLabel("Nombre");
        cargoNombreLabel.setBounds(12, 12, 70, 15);
        cargoPane.add(cargoNombreLabel);

        cargoNombreField = new JTextField();
        cargoNombreField.setColumns(10);
        cargoNombreField.setBounds(88, 10, 191, 19);
        cargoPane.add(cargoNombreField);

        JButton cargoReset = new JButton(RESET);
        cargoReset.setBounds(346, 391, 140, 25);
        cargoPane.add(cargoReset);

        JButton cargoActualizar = new JButton(ACTUALIZAR);
        cargoActualizar.setBounds(498, 391, 140, 25);
        cargoPane.add(cargoActualizar);

        JButton cargoBorrar = new JButton(BORRAR);
        cargoBorrar.setBounds(498, 354, 140, 25);
        cargoPane.add(cargoBorrar);

        JButton cargoGuardarNuevo = new JButton(GUARDARNUEVO);
        cargoGuardarNuevo.setBounds(346, 354, 140, 25);
        cargoPane.add(cargoGuardarNuevo);

        JLabel cargoCodigoLabel = new JLabel("Codigo");
        cargoCodigoLabel.setBounds(12, 41, 80, 15);
        cargoPane.add(cargoCodigoLabel);

        cargoCodigoField = new JTextField("");
        cargoCodigoField.setEditable(false);
        cargoCodigoField.setColumns(10);
        cargoCodigoField.setBounds(88, 39, 102, 19);
        cargoPane.add(cargoCodigoField);

        cargoList = new JList();
        cargoList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        cargoList.setBackground(Color.WHITE);
        cargoList.setBounds(12, 12, 200, 443);
        cargoPestana.add(cargoList);

        AdminCargoController c = new AdminCargoController();
        c.setView(this);
        listener.associate(cargoActualizar, c);
        listener.associate(cargoBorrar, c);
        listener.associate(cargoGuardarNuevo, c);
        listener.associate(cargoReset, c);
        listener.associate(cargoList, c);
    }

    public void setPestanaMateria(JTabbedPane educarPane)
    {
        JLayeredPane materiaPestana = new JLayeredPane();
        educarPane.addTab("Materia", null, materiaPestana, null);

        JLayeredPane materiaPane = new JLayeredPane();
        materiaPane.setBackground(Color.GRAY);
        materiaPane.setBounds(224, 12, 653, 443);
        materiaPestana.add(materiaPane);

        JLabel materiaNombreLabel = new JLabel("Nombre");
        materiaNombreLabel.setBounds(12, 12, 70, 15);
        materiaPane.add(materiaNombreLabel);

        materiaNombreField = new JTextField();
        materiaNombreField.setColumns(10);
        materiaNombreField.setBounds(88, 10, 191, 19);
        materiaPane.add(materiaNombreField);

        JButton materiaReset = new JButton(RESET);
        materiaReset.setBounds(346, 391, 140, 25);
        materiaPane.add(materiaReset);

        JButton materiaActualizar = new JButton(ACTUALIZAR);
        materiaActualizar.setBounds(498, 391, 140, 25);
        materiaPane.add(materiaActualizar);

        JButton materiaBorrar = new JButton(BORRAR);
        materiaBorrar.setBounds(498, 354, 140, 25);
        materiaPane.add(materiaBorrar);

        JButton materiaGuardarNuevo = new JButton(GUARDARNUEVO);
        materiaGuardarNuevo.setBounds(346, 354, 140, 25);
        materiaPane.add(materiaGuardarNuevo);

        JLabel materiaCodigoLabel = new JLabel("Codigo");
        materiaCodigoLabel.setBounds(12, 41, 80, 15);
        materiaPane.add(materiaCodigoLabel);

        materiaCodigoField = new JTextField("");
        materiaCodigoField.setEditable(false);
        materiaCodigoField.setColumns(10);
        materiaCodigoField.setBounds(88, 39, 102, 19);
        materiaPane.add(materiaCodigoField);

        materiaList = new JList();
        materiaList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        materiaList.setBackground(Color.WHITE);
        materiaList.setBounds(12, 12, 200, 443);
        materiaPestana.add(materiaList);

        AdminMateriaController c = new AdminMateriaController();
        c.setView(this);
        listener.associate(materiaActualizar, c);
        listener.associate(materiaBorrar, c);
        listener.associate(materiaGuardarNuevo, c);
        listener.associate(materiaReset, c);
        listener.associate(materiaList, c);
    }

    public void setPestanaFacultad(JTabbedPane educarPane)
    {
        JLayeredPane facultadPestana = new JLayeredPane();
        educarPane.addTab("Facultad", null, facultadPestana, null);

        JLayeredPane facultadPane = new JLayeredPane();
        facultadPane.setBackground(Color.GRAY);
        facultadPane.setBounds(224, 12, 653, 443);
        facultadPestana.add(facultadPane);

        JLabel facultadNombreLabel = new JLabel("Nombre");
        facultadNombreLabel.setBounds(12, 12, 70, 15);
        facultadPane.add(facultadNombreLabel);

        facultadNombreField = new JTextField();
        facultadNombreField.setColumns(10);
        facultadNombreField.setBounds(88, 10, 191, 19);
        facultadPane.add(facultadNombreField);

        JButton facultadReset = new JButton(RESET);
        facultadReset.setBounds(346, 391, 140, 25);
        facultadPane.add(facultadReset);

        JButton facultadActualizar = new JButton(ACTUALIZAR);
        facultadActualizar.setBounds(498, 391, 140, 25);
        facultadPane.add(facultadActualizar);

        JButton facultadBorrar = new JButton(BORRAR);
        facultadBorrar.setBounds(498, 354, 140, 25);
        facultadPane.add(facultadBorrar);

        JButton facultadGuardarNuevo = new JButton(GUARDARNUEVO);
        facultadGuardarNuevo.setBounds(346, 354, 140, 25);
        facultadPane.add(facultadGuardarNuevo);

        JLabel facultadCodigoLabel = new JLabel("Codigo");
        facultadCodigoLabel.setBounds(12, 41, 80, 15);
        facultadPane.add(facultadCodigoLabel);

        facultadCodigoField = new JTextField("");
        facultadCodigoField.setEditable(false);
        facultadCodigoField.setColumns(10);
        facultadCodigoField.setBounds(88, 39, 102, 19);
        facultadPane.add(facultadCodigoField);

        facultadList = new JList();
        facultadList.setSelectedIndex(0);

        facultadList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        facultadList.setBackground(Color.WHITE);
        facultadList.setBounds(12, 12, 200, 443);
        facultadPestana.add(facultadList);

        AdminFacultadController c = new AdminFacultadController();
        c.setView(this);
        listener.associate(facultadActualizar, c);
        listener.associate(facultadBorrar, c);
        listener.associate(facultadGuardarNuevo, c);
        listener.associate(facultadReset, c);
        listener.associate(facultadList, c);
    }

    public void setPestanaDocente(JTabbedPane educarPane)
    {
        JLayeredPane docentePestana = new JLayeredPane();
        educarPane.addTab("Docente", null, docentePestana, null);

        JLayeredPane docentePane = new JLayeredPane();
        docentePane.setBounds(224, 12, 653, 443);
        docentePestana.add(docentePane);
        docentePane.setBackground(Color.GRAY);

        JLabel docenteDniLabel = new JLabel("DNI");
        docenteDniLabel.setBounds(12, 12, 70, 15);
        docentePane.add(docenteDniLabel);

        docenteDniField = new JTextField();
        docenteDniField.setColumns(10);
        docenteDniField.setBounds(88, 10, 102, 19);
        docentePane.add(docenteDniField);

        docenteNombreField = new JTextField();
        docenteNombreField.setColumns(10);
        docenteNombreField.setBounds(88, 37, 102, 19);
        docentePane.add(docenteNombreField);

        JLabel docenteNombreLabel = new JLabel("Nombre");
        docenteNombreLabel.setBounds(12, 39, 70, 15);
        docentePane.add(docenteNombreLabel);

        docenteApellidoField = new JTextField();
        docenteApellidoField.setColumns(10);
        docenteApellidoField.setBounds(88, 68, 102, 19);
        docentePane.add(docenteApellidoField);

        JLabel docenteApellidoLabel = new JLabel("Apellido");
        docenteApellidoLabel.setBounds(12, 70, 70, 15);
        docentePane.add(docenteApellidoLabel);

        JButton docenteReset = new JButton(RESET);
        docenteReset.setBounds(346, 391, 140, 25);
        docentePane.add(docenteReset);

        JButton docenteCargo = new JButton(CARGO);
        docenteCargo.setBounds(498, 317, 140, 25);
        docentePane.add(docenteCargo);

        JButton docenteMateria = new JButton(MATERIA);
        docenteMateria.setBounds(346, 317, 140, 25);
        docentePane.add(docenteMateria);

        JButton docenteActualizar = new JButton(ACTUALIZAR);
        docenteActualizar.setBounds(498, 391, 140, 25);
        docentePane.add(docenteActualizar);

        JButton docenteBorrar = new JButton(BORRAR);
        docenteBorrar.setBounds(498, 354, 140, 25);
        docentePane.add(docenteBorrar);

        JButton docenteGuardarNuevo = new JButton(GUARDARNUEVO);
        docenteGuardarNuevo.setBounds(346, 354, 140, 25);
        docentePane.add(docenteGuardarNuevo);

        docenteUsuarioField = new JTextField();
        docenteUsuarioField.setColumns(10);
        docenteUsuarioField.setBounds(88, 100, 102, 19);
        docentePane.add(docenteUsuarioField);

        JLabel docenteUsuarioLabel = new JLabel("Usuario");
        docenteUsuarioLabel.setBounds(12, 102, 70, 15);
        docentePane.add(docenteUsuarioLabel);

        //a mano
        docenteContrasenaField = new JTextField();
        docenteContrasenaField.setColumns(10);
        docenteContrasenaField.setBounds(88, 130, 102, 19);
        docentePane.add(docenteContrasenaField);

        JLabel docenteContrasenaLabel = new JLabel("Passwd");
        docenteContrasenaLabel.setBounds(12, 132, 70, 15);
        docentePane.add(docenteContrasenaLabel);
        //fin

        docenteList = new JList();
        docenteList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        docenteList.setBackground(Color.WHITE);
        docenteList.setBounds(12, 12, 200, 443);
        docentePestana.add(docenteList);

        AdminDocenteController c = new AdminDocenteController();
        c.setView(this);
        listener.associate(docenteActualizar, c);
        listener.associate(docenteBorrar, c);
        listener.associate(docenteGuardarNuevo, c);
        listener.associate(docenteReset, c);
        listener.associate(docenteCargo, c);
        listener.associate(docenteMateria, c);
        listener.associate(docenteList, c);
    }


    public void setPestanaAlumno(JTabbedPane educarPane)
    {
        JLayeredPane alumnoPestana = new JLayeredPane();
        educarPane.addTab("Alumno", null, alumnoPestana, null);

        alumnoPestana.setLayout(null);

        alumnoList = new JList();
        alumnoList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        alumnoList.setBackground(Color.WHITE);
        alumnoList.setBounds(12, 12, 200, 443);
        alumnoPestana.add(alumnoList);

        JLayeredPane alumnoPane = new JLayeredPane();
        alumnoPane.setBackground(Color.GRAY);
        alumnoPane.setBounds(224, 12, 653, 443);
        alumnoPestana.add(alumnoPane);

        JLabel alumnoDniLabel = new JLabel("DNI");
        alumnoDniLabel.setBounds(12, 12, 70, 15);
        alumnoPane.add(alumnoDniLabel);

        alumnoDniField = new JTextField();
        alumnoDniField.setBounds(88, 10, 102, 19);
        alumnoDniField.setColumns(10);
        alumnoPane.add(alumnoDniField);

        alumnoNombreField = new JTextField();
        alumnoNombreField.setColumns(10);
        alumnoNombreField.setBounds(88, 37, 102, 19);
        alumnoPane.add(alumnoNombreField);

        JLabel alumnoNombreLabel = new JLabel("Nombre");
        alumnoNombreLabel.setBounds(12, 39, 70, 15);
        alumnoPane.add(alumnoNombreLabel);

        alumnoApellidoField = new JTextField();
        alumnoApellidoField.setColumns(10);
        alumnoApellidoField.setBounds(88, 68, 102, 19);
        alumnoPane.add(alumnoApellidoField);

        JLabel alumnoApellidoLabel = new JLabel("Apellido");
        alumnoApellidoLabel.setBounds(12, 70, 70, 15);
        alumnoPane.add(alumnoApellidoLabel);

        alumnoNroAlumnoField = new JTextField("");
        alumnoNroAlumnoField.setColumns(10);
        alumnoNroAlumnoField.setBounds(88, 162, 102, 19);
        alumnoNroAlumnoField.setEditable(false);
        alumnoPane.add(alumnoNroAlumnoField);

        JLabel alumnoNroAlumnoLabel = new JLabel("N°");
        alumnoNroAlumnoLabel.setBounds(12, 162, 70, 15);
        alumnoPane.add(alumnoNroAlumnoLabel);

        JButton alumnoReset = new JButton(RESET);
        alumnoReset.setBounds(346, 391, 140, 25);
        alumnoPane.add(alumnoReset);

        JButton alumnoActualizar = new JButton(ACTUALIZAR);
        alumnoActualizar.setBounds(498, 391, 140, 25);
        alumnoPane.add(alumnoActualizar);

        JButton alumnoBorrar = new JButton(BORRAR);
        alumnoBorrar.setBounds(498, 354, 140, 25);
        alumnoPane.add(alumnoBorrar);

        JButton alumnoGuardarNuevo = new JButton(GUARDARNUEVO);
        alumnoGuardarNuevo.setBounds(346, 354, 140, 25);
        alumnoPane.add(alumnoGuardarNuevo);

        alumnoUsuarioField = new JTextField();
        alumnoUsuarioField.setColumns(10);
        alumnoUsuarioField.setBounds(88, 100, 102, 19);
        alumnoPane.add(alumnoUsuarioField);

        JLabel alumnoUsuarioLabel = new JLabel("Usuario");
        alumnoUsuarioLabel.setBounds(12, 102, 70, 15);
        alumnoPane.add(alumnoUsuarioLabel);

        alumnoContrasenaField = new JTextField();
        alumnoContrasenaField.setColumns(10);
        alumnoContrasenaField.setBounds(88, 131, 102, 19);
        alumnoPane.add(alumnoContrasenaField);

        JLabel alumnoContrasenaLabel = new JLabel("Passwd");
        alumnoContrasenaLabel.setBounds(12, 133, 80, 15);
        alumnoPane.add(alumnoContrasenaLabel);

        AdminAlumnoController c = new AdminAlumnoController();
        c.setView(this);
        listener.associate(alumnoActualizar, c);
        listener.associate(alumnoBorrar, c);
        listener.associate(alumnoGuardarNuevo, c);
        listener.associate(alumnoReset, c);
        listener.associate(alumnoList, c);
    }

    //
    //Set arrays para las listas
    //
    public void setAlumnos(String[] a)
    {
        alumnoList.setListData(a);
    }

    public void setDocentes(String[] d)
    {
        docenteList.setListData(d);
    }

    public void setMaterias(String[] m)
    {
        materiaList.setListData(m);
    }

    public void setCargos(String[] c)
    {
        cargoList.setListData(c);
    }

    public void setFacultades(String[] f)
    {
        facultadList.setListData(f);
    }
    //
    //FIN Set arrays para las listas
    //

    //
    // Set campos Alumno
    //
    public void setAlumnoDni(String dni)
    {
        alumnoDniField.setText(dni);
    }

    public String getAlumnoDni()
    {
        return alumnoDniField.getText();
    }

    public void setAlumnoNombre(String nombre)
    {
        alumnoNombreField.setText(nombre);
    }

    public String getAlumnoNombre()
    {
        return alumnoNombreField.getText();
    }

    public void setAlumnoApellido(String apellido)
    {
        alumnoApellidoField.setText(apellido);
    }

    public String getAlumnoApellido()
    {
        return alumnoApellidoField.getText();
    }

    public void setAlumnoNro(String numeroAlumno)
    {
        alumnoNroAlumnoField.setText(numeroAlumno);
    }

    public String getAlumnoNro()
    {
        return alumnoNroAlumnoField.getText();
    }

    public void setAlumnoUsuario(String usuario)
    {
        alumnoUsuarioField.setText(usuario);
    }

    public String getAlumnoUsuario()
    {
        return alumnoUsuarioField.getText();
    }

    public void setAlumnoContrasena(String contrasena)
    {
        alumnoContrasenaField.setText(contrasena);
    }

    public String getAlumnoContrasena()
    {
        return alumnoContrasenaField.getText();
    }
    //
    // Fin set campos Alumno
    //

    //
    // Set campos Docente
    //
    public void setDocenteDni(String dni)
    {
        docenteDniField.setText(dni);
    }

    public String getDocenteDni()
    {
        return docenteDniField.getText();
    }

    public void setDocenteNombre(String nombre)
    {
        docenteNombreField.setText(nombre);
    }

    public String getDocenteNombre()
    {
        return docenteNombreField.getText();
    }

    public void setDocenteApellido(String apellido)
    {
        docenteApellidoField.setText(apellido);
    }

    public String getDocenteApellido()
    {
        return docenteApellidoField.getText();
    }

    public void setDocenteUsuario(String usuario)
    {
        docenteUsuarioField.setText(usuario);
    }

    public String getDocenteUsuario()
    {
        return docenteUsuarioField.getText();
    }

    public void setDocenteContrasena(String contrasena)
    {
        docenteContrasenaField.setText(contrasena);
    }

    public String getDocenteContrasena()
    {
        return docenteContrasenaField.getText();
    }
    //
    // Fin set campos Docente
    //

    //
    // Set-get campos Facultad
    //
    public void setFacultadNombre(String nombreFacultad)
    {
        facultadNombreField.setText(nombreFacultad);
    }

    public String getFacultadNombre()
    {
        return facultadNombreField.getText();
    }

    public void setFacultadCodigo(String codigoFacultad)
    {
        facultadCodigoField.setText(codigoFacultad);
    }

    public String getFacultadCodigo()
    {
        return facultadCodigoField.getText();
    }
    //
    // FinSet-get campos Facultad
    //

    //
    // Set-get campos Materia
    //
    public void setMateriaNombre(String nombreMateria)
    {
        materiaNombreField.setText(nombreMateria);
    }

    public String getMateriaNombre()
    {
        return materiaNombreField.getText();
    }

    public void setMateriaCodigo(String codigoMateria)
    {
        materiaCodigoField.setText(codigoMateria);
    }

    public String getMateriaCodigo()
    {
        return materiaCodigoField.getText();
    }
    //
    //Fin  Set-get campos Materia
    //

    //
    // Set-get campos Cargo
    //
    public void setCargoNombre(String nombreCargo)
    {
        cargoNombreField.setText(nombreCargo);
    }

    public String getCargoNombre()
    {
        return cargoNombreField.getText();
    }

    public void setCargoCodigo(String codigoCargo)
    {
        cargoCodigoField.setText(codigoCargo);
    }

    public String getCargoCodigo()
    {
        return cargoCodigoField.getText();
    }
    //
    // Fin Set-get campos Cargo
    //
}